﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Windows.Forms;
using DevExpress.Spreadsheet;
using DevExpress.XtraSpreadsheet;
using QL_Truong_Hoc;

namespace QL_Truong_Hoc.Export
{
    class clsDSLopVanHoa
    {

        //Data table đầu vào cần có những trường sau:
        //hs_hodem
        //hs_ten
        //hs_ngaysinh
        //hs_hokhau
        //tdvh_ten
        //ng_tennghe
        //khs_tenkhoas
        //LVH_ten
        //LVH_batdau
        //LVH_ketthuc
        //LVH_quyetdinh
        //LVH_quyetdinh_ngay
        //LVH_ID

        private string mcstrTemplate = Environment.CurrentDirectory + @"\Templates\Mau 05.3.2_Danh sach lop hoc van hoa.xls";


        public clsDSLopVanHoa()
        {
        }


        /// <summary>
        /// Thực hiện xuất ra file excel.
        /// File template là file đã định sẵn.
        /// </summary>
        /// <param name="objData">Dữ liệu đưa vào file word</param>
        public bool fncExport(DataTable objData)
        {
            bool blnResult = false;

            try
            {
                //get data
                SpreadsheetControl objExcel = new SpreadsheetControl();
                objExcel.LoadDocument(mcstrTemplate);

                xExport(objExcel, objData, false);

                return true;
            }
            catch (Exception ex) { clsCommon.fncMsgError(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name, System.Reflection.MethodBase.GetCurrentMethod().ToString(), ex.Message); }
            finally { }
            return blnResult;
        }


        /// <summary>
        /// Thực hiện xuất ra file excel.
        /// </summary>
        /// <param name="SpreadsheetControl">excel word</param>
        /// <param name="objData">Dữ liệu đầu vào</param>
        /// <param name="blnShowMergedData">Có hiện dữ liệu đã xuất ngay trên control không?</param>
        /// <returns></returns>
        public bool fncExport(SpreadsheetControl objExcelControl, DataTable objData, bool blnShowMergedData = false)
        {
            bool blnResult = false;

            try
            {
                //get data
                return xExport(objExcelControl, objData, blnShowMergedData);
            }
            catch (Exception ex) { clsCommon.fncMsgError(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name, System.Reflection.MethodBase.GetCurrentMethod().ToString(), ex.Message); }
            finally { }
            return blnResult;
        }


        /// <summary>
        /// Phương thức cơ sở thực hiện mail merge
        /// </summary>
        /// <param name="objExcelControl">control excel</param>
        /// <param name="objData">dữ liệu vào</param>
        /// <param name="blnShowMergedData">có xem kết quả không?</param>
        /// <returns></returns>
        private bool xExport(SpreadsheetControl objExcelControl, DataTable objData, bool blnShowMergedData = false)
        {
            bool blnResult = false;

            try
            {
                if (objData == null) return false;

                if (!System.IO.File.Exists(mcstrTemplate))
                {
                    clsCommon.fncMsgWarning("Không tìm thấy tệp tin mẫu.");
                    return false;
                }

                objExcelControl.LoadDocument(mcstrTemplate);

                //header
                string strTenKhoas = "";
                string strTenLop = "";
                DateTime dtLopBatDau = DateTime.MinValue;
                DateTime dtLopKetThuc = DateTime.MinValue;
                string strQuyetDinh = "";
                DateTime dtQuyetDinhNgay = DateTime.MinValue;
                
                //export
                string strHoDem;
                string strTen;
                DateTime dtNgaySinh;
                string strHoKhau;
                string strVanHoa;
                string strNgheHoc;

                int intCurrentRow = 6;
                int intCurrentCol = 0;

                //tạo n dong moi.
                if (objData.Rows.Count > 3)
                {
                    objExcelControl.ActiveWorksheet.Rows.Insert(8, objData.Rows.Count - 3);

                    //(12 + objData.Rows.Count - 2) -> bắt đầu tính từ dòng 12 + (Số bản ghi - 1 là 2 dòng đầu tiên bị nhảy qua + 1 dòng cuối ko copy format)
                    objExcelControl.ActiveWorksheet.Range["A9:H" + (8 + objData.Rows.Count - 3)].CopyFrom(objExcelControl.ActiveWorksheet.Range["A8:H8"]);
                }

                //lấy dòng đầu tiên fill header
                if (objData.Rows.Count > 0)
                {
                    strTenKhoas = clsCommon.fncCnvNullToString(objData.Rows[0]["khs_tenkhoas"]);
                    strTenLop = clsCommon.fncCnvNullToString(objData.Rows[0]["LVH_ten"]);
                    strQuyetDinh = clsCommon.fncCnvNullToString(objData.Rows[0]["LVH_quyetdinh"]);
                    dtLopBatDau = clsCommon.fncCnvNullToDatetime(objData.Rows[0]["LVH_batdau"]);
                    dtLopKetThuc = clsCommon.fncCnvNullToDatetime(objData.Rows[0]["LVH_ketthuc"]);
                    dtQuyetDinhNgay = clsCommon.fncCnvNullToDatetime(objData.Rows[0]["LVH_quyetdinh_ngay"]);
                }

                objExcelControl.ActiveWorksheet.Cells[1, 0].Value = string.Format("DANH SÁCH HỌC SINH HỌC VĂN HOÁ TRUNG CẤP NGHỀ KHOÁ {0}", strTenKhoas.ToUpper());
                objExcelControl.ActiveWorksheet.Cells[2, 0].Value = string.Format("{0}", strTenLop.ToUpper());
                objExcelControl.ActiveWorksheet.Cells[3, 0].Value = string.Format("Thời gian đào tạo: {0} tháng (từ ngày {1} đến {2})",clsCommon.fncMonthDifference(dtLopBatDau, dtLopKetThuc), dtLopBatDau.ToString("dd/MM/yyyy"), dtLopKetThuc.ToString("dd/MM/yyyy"));
                objExcelControl.ActiveWorksheet.Cells[4, 0].Value = string.Format("(Kèm theo Quyết định thành lập lớp học số: {0}/QĐ-CĐN2 ngày {1})", strQuyetDinh, dtQuyetDinhNgay.ToString("dd/MM/yyyy"));

                for (int i = 0; i <= objData.Rows.Count - 1; i++)
                {
                    //lay data
                    strHoDem = clsCommon.fncCnvNullToString(objData.Rows[i]["hs_hodem"]);
                    strTen = clsCommon.fncCnvNullToString(objData.Rows[i]["hs_ten"]);
                    dtNgaySinh = clsCommon.fncCnvNullToDatetime(objData.Rows[i]["hs_ngaysinh"]);
                    strHoKhau = clsCommon.fncCnvNullToString(objData.Rows[i]["hs_hokhau"]);
                    strVanHoa = clsCommon.fncCnvNullToString(objData.Rows[i]["tdvh_ten"]);
                    strNgheHoc = clsCommon.fncCnvNullToString(objData.Rows[i]["ng_tennghe"]);

                    //set cell
                    intCurrentCol = 0; objExcelControl.ActiveWorksheet.Cells[intCurrentRow, intCurrentCol].Value = i + 1;
                    intCurrentCol++; objExcelControl.ActiveWorksheet.Cells[intCurrentRow, intCurrentCol].Value = strHoDem;
                    intCurrentCol++; objExcelControl.ActiveWorksheet.Cells[intCurrentRow, intCurrentCol].Value = strTen;
                    intCurrentCol++; if(dtNgaySinh > DateTime.MinValue) objExcelControl.ActiveWorksheet.Cells[intCurrentRow, intCurrentCol].Value = dtNgaySinh.ToString("dd/MM/yyyy");
                    intCurrentCol++; objExcelControl.ActiveWorksheet.Cells[intCurrentRow, intCurrentCol].Value = strHoKhau;
                    intCurrentCol++; objExcelControl.ActiveWorksheet.Cells[intCurrentRow, intCurrentCol].Value = strVanHoa;
                    intCurrentCol++; objExcelControl.ActiveWorksheet.Cells[intCurrentRow, intCurrentCol].Value = strNgheHoc;
                    
                    intCurrentRow++;
                }

                ////file to save
                //SaveFileDialog dlgSave = new SaveFileDialog();
                //dlgSave.Filter = "Excel (*.xls)|*.xls|All files (*.*)|*.*";
                //dlgSave.FilterIndex = 1;
                //dlgSave.RestoreDirectory = true;

                ////export word
                //objExcelControl.SaveDocument(dlgSave.FileName, DocumentFormat.Xls);

                return true;
            }
            catch (Exception ex) { clsCommon.fncMsgError(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name, System.Reflection.MethodBase.GetCurrentMethod().ToString(), ex.Message); }
            finally { }
            return blnResult;
        }

    }
}
